#ifndef MASQUE_H
#define MASQUE_H
/**
 * \file Masque.h
 * \brief Définit un Masque
 * \author Romain Charbit
 *
 */
#include <GL/glut.h>
/*! \class Masque
* \brief Classe Masque binaire
*
*  La classe permet l'utilisation d'un masque binaire de la taille de l'image à inpainter. Les valeurs sont enregistré a 0 ou 255.
*/

class Masque{

public:
/*!
 *  \brief Constructeur
 *
 *  Constructeur de la classe Masque
 *
 *  \param l : largeur du masque
 *  \param h : hauteur du masque
 */
	Masque(int _l,int _h);
/*!
 *  \brief Destructeur
 *
 *  Destructeur de la classe Masque
 * 
 */
	~Masque();
/*!
 *  \brief Lit une valeur
 *
 *  Methode qui permet de lire une valeur dans le masque, 0 ou 255
 *
 *  \param x : coordonnées en x de la valeur a lire
 *  \param y : coordonnées en y de la valeur a lire
 *  \return renvoie 0 ou 255 suivant que le masque est faux ou vrai
 */
	GLubyte Lit(int _x,int _y);
/*!
 *  \brief Lit une valeur
 *
 *  Methode qui permet de lire une valeur dans le masque, 0 ou 1
 *
 *  \param x : coordonnées en x de la valeur a lire
 *  \param y : coordonnées en y de la valeur a lire
 *  \return renvoie 0 ou 1 suivant que le masque est faux ou vrai
 */
	GLubyte LitBool(int _x,int _y);
/*!
 *  \brief Ecrit une valeur
 *
 *  Methode qui permet d'ecrire une valeur dans le masque
 *
 *  \param x : coordonnées en x de la valeur a ecrire
 *  \param y : coordonnées en y de la valeur a ecrire
 *  \param b : couleur de la valeur a ecrire
 *  \return void
 */
	void Ecrit(int _x,int _y,GLubyte _b);
/*!
 *  \brief Dessine dans le masque
 *
 *  Methode qui permet de dessiner/effacer dans le masque en utilisant l'algo de bresenham
 *
 *  \param xa : coordonnées en x du premier point
 *  \param ya : coordonnées en y du premier point
 *  \param xb : coordonnées en x du second point
 *  \param yb : coordonnées en y du second point
 *  \param couleur : permet de dessiner/effacer en passant 255/0 comme valeur
 *  \return void
 */
	void Dessine(int _xa,int _ya,int _xb, int _yb, int _couleur);
/*!
 *  \brief Affiche le masque
 *
 *  Methode qui permet d'afficher le masque en transparence par dessus l'image
 *
 *  \return void
 */	
	void Afficher();
/*!
 *  \brief Affiche le pinceau
 *
 *  Methode qui permet d'afficher un petit carré blanc superposé a la souris pour afficher la taille du pinceau
 *  \param x : coordonées en x de la souris
 *  \param y : coordonées en y de la souris
 *  \return void
 */	
	void AffichePinceau(int x,int y);

/*!
 *  \brief Efface le masque
 *
 *  Methode qui rempli le masque avec la valeur 0
 *
 *  \return void
 */
	void Effacer();
/*!
 *  \brief Modifie la taille du pinceau
 *
 *  Methode qui permet de modifier la taille du pinceau qui remplit le masque dans la methode dessine
 *  \param t : taille du pinceau 
 *  \return void
 */
	void setTaillePinceau(int t);
/*!
 *  \brief Accesseur taille du pinceau
 *
 *  Renvoie la taille du pinceau
 *
 *  \return renvoie la taille du pinceau
 */
	int getTaillePinceau();
	
private:
	int	largeur; /*!<Largeur du masque*/
	int	hauteur; /*!<Hauteur du masque*/
	int taillePinceau; /*!<Taille du pinceau pour le dessin dans le masque*/
	GLubyte* data; /*!<Données du masque*/
};
#endif
